<?php
//рус
include_once (_CORE_PATH . "lib_prototype.php");   
class date_class implements lib_prototype_class
{
    public function __construct ()
    {   
          
    }
    
    public function GetTimeZoneOptions()
    {
    	$options = array();
    	
    	$continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific', 'Etc' );
    	$options = array_flip($continents);
    	foreach ( DateTimeZone::listIdentifiers() as $zone ) 
    	{
    		$zoneParts = explode('/', $zone, 2);
    		if (!isset($zoneParts[1]) || !in_array($zoneParts[0], $continents)) continue;
    		
    		if (!is_array($options[$zoneParts[0]])) $options[$zoneParts[0]] = array();
    		$options[$zoneParts[0]][$zone] = str_replace('/', ' ',$zoneParts[1]);
    	}
    	
    	foreach ($options as $cont => &$contOpt)
    	{
    		asort($contOpt);
    	}
    	
    	return $options;
    }
    
    public function SetTimeZone($timeZone)
    {
    	if (!in_array($timeZone, DateTimeZone::listIdentifiers())) $timeZone = 'UTC';
    	@date_default_timezone_set($timeZone);
    }
    
    /**
     * смещение задается в виде +02:00.
     * переменную time_zone можно задавать в виде Europe/Minsk, если настроены спец. таблицы в БД "mysql"; на деле далеко не у всех хостеров они настроены.
     * поэтому для каждого соединения берём настройки timezone для PHP и вычисляем смещение в часах.
     * единственная проблема может возникнуть, если скрипт будет работать во время перехода на летнее/зимнее время:
     * php функции будут роаботать корректно, а MySQL функции будут работать по старому времени.
     * эта ситуация слишком маловероятна и опасна только в случае работы с важными данными(денежные транзакции и т.п.), поэтому 
     * с чистой совестью можно пренебречь.
     * */
    public function getTimezoneOffset()
    {
        $timeZone = new DateTimeZone(date_default_timezone_get());
        $secOffset = $timeZone->getOffset(new DateTime());
		$dd = new DateTime('@' .abs($secOffset), new DateTimeZone('UTC'));
		return ($secOffset >= 0 ? '+' : '-').$dd->format('H:i');    	
    }    
}    
    
